监测磁盘空间
du命令能够显示单个文件和目录的磁盘使用情况,-s选项用来总结目录一级的整体使用情况,这在计算单个用户使用的总体磁盘空间时很方便,下面的例子是使用du命令总结/home目录下每个用户的$HOME目录的磁盘占用情况:
du还有另外一个选项参数-S(大写S),它为每个目录和子目录分别提供了总计信息,例如:
1 2 3 4 5 6 7 8 9 10 11 12
| $ sudo du -S /var/log/ 4 /var/log/anaconda.ifcfg.log 20 /var/log/anaconda.log 32 /var/log/anaconda.program.log 108 /var/log/anaconda.storage.log 40 /var/log/anaconda.syslog 56 /var/log/anaconda.xlog 116 /var/log/anaconda.yum.log 4392 /var/log/audit 4 /var/log/boot.log [...] $
|
当然,我们最感兴趣的还是占用磁盘空间最多的目录,所以需要使用sort命令对du产生的输出进行排序:
1
| $ sudo du -S /var/log/ | sort -rn
|
其中,-n选项允许按数字排序,-r选项会先列出最大数字(逆序)。
下面使用sed编辑器对输出进行优化:
1
| sed '{11,$D; =}' | sed 'N; s/\n/ /'
|
对前十名之后的数据删除并且给每一行加上行号,此时再使用gawk命令对输出进行格式化,sed编辑器的输出会通过管道输出到 gawk命令,然后用 printf 函数打印出来:
1 2 3 4 5
| $ sudo du -S /var/log/ | > sort -rn | > sed '{11,$D; =}' | > sed 'N; s/\n/ /' | > gawk '{printf $1 ":" "\t" $2 "\t" $3 "\n"}'
|
最后输出效果如下:
1 2 3 4 5 6 7 8 9 10
| 1: 4396 /var/log/audit 2: 3024 /var/log/sa 3: 2976 /var/log/ 4: 420 /var/log/gdm 5: 152 /var/log/ConsoleKit 6: 80 /var/log/prelink 7: 4 /var/log/sssd 8: 4 /var/log/samba/old 9: 4 /var/log/samba 10: 4 /var/log/ppp
|
下面是完整的shell脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #!/bin/bash CHECK_DIRECTORIES=" /var/log/home"; DATE=$(date ‘+%m%d%y’) exec 0> disk_space_$DATE.rpt echo "Top Ten Disk Space Usage" echo "for $CHECK_DIRECTORIES Directories" for DIR_CHECK in $CHECK_DIRECTORIES do echo "" echo "The $DIR_CHECK Directory:" du -S $DIR_CHECK 2> /dev/null | sort -rn | sed '{11,$D; =}' | sed 'N; s/\n/ /' | gawk '{printf $1 ":" "\t" $2 "\t" $3 "\n"}' done exit
|